<?php
class ShoppingCartController extends XPHP_Controller
{
	/**
	 * Chi tiết giỏ hàng
	 */
	public function indexAction()
	{
		$productList = array();
		$cart_total = 0;
		
		if(isset($this->helper->session->cart))
		{
			//Lấy ra toàn bộ danh sách sản phẩm trong giỏ hàng trả về view
			$cartList = $this->helper->session->cart;
			foreach ($cartList as $pId => $p)
			{
				//Lấy ra thông tin sản phẩm
				$product = new Models_Products($pId);
				$productList[] = array( "id" => $product->id, 
										"name" => $product->name, 
										"price" => $product->price,
										"color" => $product->color,
										"size" => $product->size,
										"quantity" => $p["quantity"]);
			}
			
			//Lấy ra tổng số tiền của đơn hàng
			$total = 0;
			foreach ($this->helper->session->cart as $productId => $val)
			{
				$pro = new Models_Products($productId);
				$total += ((int)$val["quantity"] * $pro->price);
			}
			
			$cart_total = number_format($total, 0, ',', '.');
		
		}
		
		$this->view->productList = $productList;
		$this->view->total = $cart_total;
		//Lấy thông tin website
		$model = new Areas_CP_Models_Settings();
		$this->view->settings = $model->select("id=1");
		$this->view->modelSizes = new Areas_CP_Models_Sizes();	
		$this->loadLayout("NewProduct");
		return $this->view();
	}
	
	/**
	 * Thanh toán giỏ hàng
	 */
	public function checkoutAction()
	{
		$model = new Models_Shopping();
		
		//Nếu người dùng đã đăng nhập lấy thông tin của thành viên đăng ký
		if(isset($this->helper->session->member))
		{
			$member = $this->helper->session->member;
			//$customer = new Models_Customer($this->helper->session->member->id);
			$model->fullname = $member->fullname;
			$model->email = $member->email;
			$model->phone = $member->phone;
			$model->address = $member->address;
			$model->identity_card = $member->identity_card;
		}
		
		//Thông tin thanh toán
		$modelSetting = new Areas_CP_Models_Settings();
		$data = $modelSetting->select('id=1');
		$this->view->info = $data;
		$this->loadLayout("NewProduct");
		return $this->view($model);
	}

	/**
	 * [[
	 * model: Models_Shopping
	 * ]]
	 */
	public function checkoutPOST()
	{
		if($this->hasModel())
		{
			if($this->model->isValid())
			{
				if(isset($this->helper->session->cart_total) && $this->helper->session->cart_total > 0)
				{
					//Lấy ra ngày hiện tại
					$this->model->date_create = XPHP_Date::toTime(date("H:i:s d/m/y"));
					//Trạng thái đơn hàng là chưa xử lý
					$this->model->status = 0;
					//Insert vào CSDL và lấy ra id của đơn hàng
					$spid = $this->model->insert();
					//Insert danh sách sản phẩm vào bảng chi tiết đơn hàng
					foreach ($this->helper->session->cart as $productID => $v)
					{
						//Lấy thông tin chi tiết sản phẩm
						$product = new Models_Products($productID);
						//Tạo mới một chi tiết đơn hàng
						$dsp = new Models_DetailSP();
						$dsp->spID = $spid;
						$dsp->productID = $productID;
						$dsp->quantity = $v["quantity"];
						$dsp->size = $v["size"];
						$dsp->color = $v["color"];
						$dsp->price = $product->price;
						$dsp->insert();
					}
					//Xóa sạch giỏ hàng và lưu vào session
					unset($this->helper->session->cart);
					$this->helper->session->cart_total = 0;
					
					//Chuyển tới trang thanh toán thành công
					return $this->redirect("checkoutSuccess");
				}
				//Chuyển tới trang thanh toàn lỗi
				return $this->redirect("checkoutFail", array('0'));
			}
		}
	}

	public function checkoutSuccessAction()
	{
		$this->loadLayout("NewProduct");
		$model = new Areas_CP_Models_Settings();
		$this->view->settings = $model->select("id=1");
		return $this->view();
	}
	
	public function checkoutFailAction($args)
	{
		switch ($args[0])
		{
			case '0':
				$this->view->message = "Không có sản phẩm nào trong giỏ hàng !";
				break;
			case '1':
				$this->view->message = "Thông tin bạn nhập bị lỗi !";
				break;		
		}
		
		
		return $this->view();
	}
	
	/**
	 * Thêm sản phẩm vào giỏ hàng
	 */
	public function addCartAJAX()
	{
		$id = $this->params["id"];
		$color = $this->params["color"];
		$size = $this->params["size"];

		//Nếu chưa tồn tại giỏ hàng => khởi tạo giỏ hàng
		if(!isset($this->helper->session->cart))
			$this->helper->session->cart = array();
		
		//Lấy ra thông tin giỏ hàng
		$cart = $this->helper->session->cart;
		
		//Nếu đã có sản phẩm trong giỏ => tăng số lượng lên 1	
		if(isset($cart[$id]))
		{
			$cart[$id]["quantity"] += 1;
		}
		//Nếu chưa có thêm sản phẩm vào giở hàng với số lượng là 1
		else
		{
			$cart[$id]["quantity"] = 1;
			$cart[$id]["color"] = $color;
			$cart[$id]["size"] = $size;
		}
		//Lấy ra tổng số sản phầm trong giỏ hàng
		$total = 0;
		foreach ($cart as $productId => $val)
		{
			$total += (int)$val["quantity"];
		}
		
		//Lưu vào giỏ hàng
		$this->helper->session->cart = $cart;
		
		//Lưu tổng số vào session
		$this->helper->session->cart_total = $total;
		
		return $this->json(array("success" => true, "cart_total" => $total));
	}

	/**
	 * Xóa sản phẩm khỏi giỏ hàng
	 */
	public function deleteCartAJAX()
	{
		$id = $this->params["id"];
		if(isset($this->helper->session->cart))
		{
			$cart = $this->helper->session->cart;
			//Giảm số lượng tổng số sản phẩm trong session
			if(isset($cart[$id]["quantity"]))
			{
				(int)$this->helper->session->cart_total -= (int)$cart[$id]["quantity"];
			}
			//Xóa sản phẩm trong session
			if(isset($cart[$id]))
				unset($cart[$id]);
			
			//Lấy ra tổng số tiền của đơn hàng
			$total = 0;
			foreach ($cart as $productId => $val)
			{
				$pro = new Models_Products($productId);
				$total += ((int)$val["quantity"] * $pro->price);
			}
			
			//Lưu vào session
			 $this->helper->session->cart = $cart;
			
			return $this->json(array(
					"success" => true, 
					"cart_total" => $this->helper->session->cart_total, 
					"total" => number_format($total, 0, ',', '.')
					));
		}
	}
	
	/**
	 * Cập nhật lại giỏ hàng
	 */
	public function updateCartAJAX()
	{
		$id = $this->params["id"];
		$quantity = $this->params["quantity"];
		
		//Lấy thông tin sản phẩm
		$product = new Models_Products($id);
		
		//Lấy thông tin giỏ hàng
		$cart = $this->helper->session->cart;
		
		//Cập nhật
		$cart[$id]["quantity"] = $quantity;
		//Tăng tổng số sản phẩm vào session
		$cc = 0;
		foreach ($cart as $pId => $v)
		{
			$cc += (int)$v["quantity"];
		}
		$this->helper->session->cart_total = $cc;
		
		//Thành tiền
		$sum = (int)$cart[$id]["quantity"] * (float)$product->price;
		
		//Lấy ra tổng số tiền của đơn hàng
		$total = 0;
		foreach ($cart as $productId => $val)
		{
			$pro = new Models_Products($productId);
			$total += ((int)$val["quantity"] * $pro->price);
		}
		
		//Lưu lại thông tin vào giỏ hàng
		$this->helper->session->cart = $cart;
		
		return $this->json(array(
				"success" => true,
				"id" => $id, 
				"sum" => number_format($sum, 0, ',', '.'), 
				"total" => number_format($total, 0, ',', '.'), 
				"cart_total" => $cc
			));
	}
}